package com.ruoyi.fun.service.impl;

import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.fun.mapper.EcUserCouponMapper;
import com.ruoyi.fun.domain.EcUserCoupon;
import com.ruoyi.fun.service.IEcUserCouponService;

/**
 * 用户优惠券Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-08-15
 */
@Service
public class EcUserCouponServiceImpl implements IEcUserCouponService 
{
    @Autowired
    private EcUserCouponMapper ecUserCouponMapper;

    /**
     * 查询用户优惠券
     * 
     * @param userCouponId 用户优惠券主键
     * @return 用户优惠券
     */
    @Override
    public EcUserCoupon selectEcUserCouponByUserCouponId(Long userCouponId)
    {
        return ecUserCouponMapper.selectEcUserCouponByUserCouponId(userCouponId);
    }

    /**
     * 查询用户优惠券列表
     * 
     * @param ecUserCoupon 用户优惠券
     * @return 用户优惠券
     */
    @Override
    public List<EcUserCoupon> selectEcUserCouponList(EcUserCoupon ecUserCoupon)
    {
        return ecUserCouponMapper.selectEcUserCouponList(ecUserCoupon);
    }

    /**
     * 新增用户优惠券
     * 
     * @param ecUserCoupon 用户优惠券
     * @return 结果
     */
    @Override
    public int insertEcUserCoupon(EcUserCoupon ecUserCoupon)
    {
        ecUserCoupon.setCreateTime(DateUtils.getNowDate());
        ecUserCoupon.setOrgId(SecurityUtils.getDeptId());
        
        // 如果没有设置优惠券码，则生成一个唯一的优惠券码
        if (ecUserCoupon.getCouponCode() == null || ecUserCoupon.getCouponCode().isEmpty()) {
            String couponCode = generateCouponCode();
            ecUserCoupon.setCouponCode(couponCode);
        }
        
        // 设置默认使用状态为未使用
        if (ecUserCoupon.getUseStatus() == null || ecUserCoupon.getUseStatus().isEmpty()) {
            ecUserCoupon.setUseStatus("0"); // 0表示未使用
        }
        
        return ecUserCouponMapper.insertEcUserCoupon(ecUserCoupon);
    }
    
    /**
     * 生成唯一的优惠券码
     * 
     * @return 优惠券码
     */
    private String generateCouponCode() {
        // 生成格式：CPN + 年月日 + 6位随机数
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyyMMdd");
        String dateStr = sdf.format(new java.util.Date());
        int randomNum = (int)(Math.random() * 900000) + 100000; // 生成6位随机数
        return "CPN" + dateStr + randomNum;
    }

    /**
     * 修改用户优惠券
     * 
     * @param ecUserCoupon 用户优惠券
     * @return 结果
     */
    @Override
    public int updateEcUserCoupon(EcUserCoupon ecUserCoupon)
    {
        ecUserCoupon.setUpdateTime(DateUtils.getNowDate());
        return ecUserCouponMapper.updateEcUserCoupon(ecUserCoupon);
    }

    /**
     * 批量删除用户优惠券
     * 
     * @param userCouponIds 需要删除的用户优惠券主键
     * @return 结果
     */
    @Override
    public int deleteEcUserCouponByUserCouponIds(Long[] userCouponIds)
    {
        return ecUserCouponMapper.deleteEcUserCouponByUserCouponIds(userCouponIds);
    }

    /**
     * 删除用户优惠券信息
     * 
     * @param userCouponId 用户优惠券主键
     * @return 结果
     */
    @Override
    public int deleteEcUserCouponByUserCouponId(Long userCouponId)
    {
        return ecUserCouponMapper.deleteEcUserCouponByUserCouponId(userCouponId);
    }

    /**
     * 根据userCouponId和组织ID查询UserCoupon
     * 
     * @param userCouponId UserCoupon主键
     * @param orgId 组织ID
     * @return UserCoupon
     */
    @Override
    public EcUserCoupon selectEcUserCouponByUserCouponIdAndOrgId(Long userCouponId, Long orgId)
    {
        return ecUserCouponMapper.selectEcUserCouponByUserCouponIdAndOrgId(userCouponId, orgId);
    }

    /**
     * 根据组织ID查询UserCoupon列表
     * 
     * @param ecusercoupon UserCoupon
     * @param orgId 组织ID
     * @return UserCoupon集合
     */
    @Override
    public List<EcUserCoupon> selectEcUserCouponListByOrgId(EcUserCoupon ecusercoupon, Long orgId)
    {
        return ecUserCouponMapper.selectEcUserCouponListByOrgId(ecusercoupon, orgId);
    }

    /**
     * 根据用户ID和组织ID查询用户优惠券列表
     * 
     * @param userId 用户ID
     * @param orgId 组织ID
     * @return 用户优惠券集合
     */
    @Override
    public List<EcUserCoupon> selectEcUserCouponListByUserIdAndOrgId(Long userId, Long orgId)
    {
        return ecUserCouponMapper.selectEcUserCouponListByUserIdAndOrgId(userId, orgId);
    }

    /**
     * 根据订单号查询用户优惠券
     * 
     * @param orderNo 订单号
     * @param userId 用户ID
     * @param orgId 组织ID
     * @return 用户优惠券
     */
    @Override
    public EcUserCoupon selectEcUserCouponByOrderNo(String orderNo, Long userId, Long orgId)
    {
        return ecUserCouponMapper.selectEcUserCouponByOrderNo(orderNo, userId, orgId);
    }
}